← 返回首頁

🔄 氣泡排序法

Bubble Sort - 可視化演示與詳細解釋

什麼是氣泡排序法?

氣泡排序法是一種簡單的排序演算法,透過重複地比較相鄰的元素,如果順序不對就交換它們,直到整個陣列排序完成。

演算法特點

  • 簡單易懂:邏輯清晰,容易實現
  • 穩定排序:相等元素的相對位置不改變
  • 原地排序:不需要額外的記憶體空間
  • 效率較低:適合小規模資料

排序原理

逐次比較相鄰兩個元素,將較大(或較小)的元素向後(或向前)移動,如同氣泡上升一樣,故稱為「氣泡排序」。

互動演示

比較次數:0

交換次數:0

當前步驟:就緒

時間與空間複雜度

情景 時間複雜度 說明
最好情況 O(n) 陣列已排序,只需一次掃描
平均情況 O(n²) 隨機排列的陣列
最壞情況 O(n²) 陣列反向排序,需要最多比較
空間複雜度 O(1) 原地排序,僅需常數額外空間

詳細步驟

  1. 比較陣列第一個和第二個元素
  2. 如果第一個大於第二個,則交換它們
  3. 比較第二個和第三個元素,重複上述過程
  4. 直到比較到陣列的最後一個元素
  5. 完成一輪掃描後,最大的元素會移動到陣列末尾
  6. 忽略已排序的部分,重複步驟 1-5
  7. 直到整個陣列排序完成

虛擬碼與實際程式碼對照

這裡展示 Bubble Sort 的核心邏輯,從演算法虛擬碼到 JavaScript 實作的對應。

虛擬碼

function bubbleSort(arr):
    n = length(arr)
    for i in 0..n-2:
        swapped = false
        for j in 0..n-i-2:
            if arr[j] > arr[j+1]:
                swap(arr, j, j+1)
                swapped = true
        if not swapped:
            break

JavaScript 對照

async function bubbleSort() {
    const n = array.length;
    for (let i = 0; i < n - 1; i++) {
        let swapped = false;
        for (let j = 0; j < n - i - 1; j++) {
            if (!isSorting) return;
            if (array[j] > array[j + 1]) {
                await swap(j, j + 1);
                swapped = true;
            }
        }
        if (!swapped) break;
    }
}

程式碼與動畫對應

const n = array.length;                    -> 初始化資料長度,準備整體動畫範圍
for (let i ... )                            -> 每一輪掃描開始,標示已排序右側區域
for (let j ... )                            -> 比較相鄰兩根長條,動畫中高亮它們
if (array[j] > array[j + 1])              -> 判斷是否需交換
await swap(j, j + 1);                      -> 觸發兩根長條交換動畫
if (!swapped) break;                       -> 偵測是否需要提前結束動畫

邊界條件(Boundary Conditions)